
import { Component, Vue } from 'vue-property-decorator';
import { superFun } from '@/utils/Annotate'
/**
 * 这是一个弹窗父容器mixin类
 * 通过ref找到弹窗对象，调用mixinViewDialog中的方法
 */
@Component({
})
export class mixinDialogParent extends Vue {

    /**
     * 关闭弹窗
     *
     * @param {string} [dialogName='dialogForm'] 弹窗ref
     * @param {string} [key='infoData'] 关闭时重置数据字段名称
     * @memberof mixinDialogParent
     */
    @superFun()
    onCloseDialog(dialogName: string = 'dialogForm', key: string = 'infoData') {
        // console.log('onCloseDialog');
        const me = this as any;
        // 检查是否有closeBefore方法，如果有就执行
        me.beforecloseDialog && me.beforecloseDialog(dialogName);
        // 关闭弹窗
        me.setDialogHidden(true, dialogName);
        // 重置数据，不重置同一条数据下次修改时Watch无法监听改变
        me.setDialogValue(key, -1, dialogName);
    }

    /**
     * 设置弹窗是否隐藏
     *
     * @param {boolean} v true 隐藏，false 显示
     * @param {string} [dialogName='dialogForm'] 弹窗ref
     * @memberof mixinDialogParent
     */
    setDialogHidden(v: boolean, dialogName: string = 'dialogForm') {
        (this.$refs[dialogName] as any).setHidden(v);
    }

    /**
     * 显示弹窗
     *
     * @param {string} [dialogName='dialogForm'] 弹窗ref
     * @memberof mixinDialogParent
     */
    showDialog(dialogName: string = 'dialogForm') {
        this.setDialogHidden(false, dialogName);
    }

    /**
     * 隐藏弹窗
     *
     * @param {string} [dialogName='dialogForm'] 弹窗ref
     * @memberof mixinDialogParent
     */
    hideDialog(dialogName: string = 'dialogForm') {
        this.setDialogHidden(true, dialogName);
    }

    /**
     * 提交数据成功后逻辑处理，会调用onCloseDialog方法
     *
     * @param {*} [{
     *  dialogName = 'dialogForm', 弹窗ref名称
     *  isReLoad = true, 是否重载缓存数据，用于固定公用数据需要更新的场景
     *  resData 预留数据，还未使用
     *  isContinue = false 是否继续，如果继续将不会关闭弹窗
     *  }={}]
     * @memberof mixinDialogParent
     */
    onSubmitSuccess({ dialogName = 'dialogForm', isReLoad = true, resData, isContinue = false }: any = {}) {
        const me = this as any;
        if (!isContinue) {
            // 关闭弹窗
            me.onCloseDialog(dialogName);
        }
        if (isReLoad) {
            me.loadView && me.loadView({
                dialogName,
                isAdd: !me.getDialogValue('isEdit', dialogName),
                resData
            });
        }
    }

    /**
     * 设值弹窗指定字段的值
     *
     * @param {string} key 字段名称
     * @param {*} data 字段值
     * @param {string} [dialogName='dialogForm'] 弹窗ref名称
     */
    setDialogValue(key: string, data: any, dialogName: string = 'dialogForm') {
        const me = this as any;
        me.$refs[dialogName].setValue(key, data);
    }

    /**
     * 获取弹窗指定字段的值
     *
     * @param {string} key 字段名称
     * @param {string} [dialogName='dialogForm'] 弹窗ref名称
     * @memberof mixinDialogFormParent
     */
    getDialogValue(key: string, dialogName: string = 'dialogForm') {
        const me = this as any;
        return me.$refs[dialogName].getValue(key);
    }
}
